package solution;

/**
 * <a href="https://www.nowcoder.com/study/live/718/1/3">
 * 牛客网-算法中级班-课后练习1.3</a>
 *
 * @author or2
 * @Description 有一个NxN整数矩阵，请编写一个算法，将矩阵顺时针旋转90度。
 * 给定一个NxN的矩阵，和矩阵的阶数N,请返回旋转后的NxN矩阵,保证N小于等于300。
 * @create 2021年09月15日 时间: 20:16
 */
public class RotateMatrix {
    public int[][] rotateMatrix(int[][] mat, int n) {
        int lineStart = 0;
        int lineEnd = n - 1;
        int rowStart = 0;
        int rowEnd = n - 1;

        while (lineStart < lineEnd) {
            rotate(mat, lineStart++, rowStart++, lineEnd--, rowEnd--);
        }

        return mat;
    }

    private void rotate(int[][] mat, int lineStart, int rowStart, int lineEnd, int rowEnd) {
        int size = lineEnd - lineStart;
        for (int i = 0, tmp; i < size; i++) {
            tmp = mat[lineStart][rowStart + i];
            mat[lineStart][rowStart + i] = mat[lineEnd - i][rowStart];
            mat[lineEnd - i][rowStart] = mat[lineEnd][rowEnd - i];
            mat[lineEnd][rowEnd - i] = mat[lineStart + i][rowEnd];
            mat[lineStart + i][rowEnd] = tmp;
        }
    }
}
